﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace NAVE_Alice_demo.Cena08.Cena.Camada
{
    /// <summary>
    /// /// Classe de camada
    /// </summary>
    class Camada1 : Camada
    {
        #region Variáveis
        /// <summary>
        /// Um objeto 'porco' para acompanhar esta camada
        /// </summary>
        private Objeto.Porco porco;

        /// <summary>
        /// Um objeto 'unicornio' para acompanhar esta camada
        /// </summary>
        private Objeto.Unicornio unicornio;

        /// <summary>
        /// Um objeto 'morcego' para acompanhar esta camada
        /// </summary>
        private Objeto.Morcego morcego;

        #endregion

        #region Construtor
        /// <summary>
        /// Construtor da classe
        /// </summary>
        /// <param name="Content">Carregar recursos do content</param>
        public Camada1(ContentManager Content)
        {
            this.t2d_imagem = Content.Load<Texture2D>("Cena08//Cena//Camada1//Camada1");
            this.v2d_posicaoQuadroImagem = new Vector2(0, 0);
            this.v2d_tamanhoQuadroImagem = new Vector2(1024, 768); 
            this.flt_velocidadeParalaxeMaxima = 4;
            this.flt_velocidadeParalaxeAtual = 0;

            this.porco = new Objeto.Porco(Content);
            this.unicornio = new Objeto.Unicornio(Content);
            this.morcego = new Objeto.Morcego(Content);
        }

        #endregion

        #region Métodos
        /// <summary>
        /// Atualizar posição e métodos da camada
        /// </summary>
        /// <param name="gameTime">Tempo de jogo real</param>
        /// <param name="mouse">Estado do mouse</param>
        public override void Update(GameTime gameTime, MouseState mouse)
        {
            //Deixe que a classe pai faça o que a filha não precisa...
            base.Update(gameTime, mouse);

            //Atualize a posição do objeto 'porco' com a velocidade atual sempre inversa, pois o porco se move em direção contrária
            //do quadro de corte da imagem de fundo
            porco.AtualizandoPosicao(flt_velocidadeParalaxeAtual * -1);

            //Atualize a posição do objeto 'unicornio' com a velocidade atual sempre inversa, pois o unicornio se move em direção contrária
            //do quadro de corte da imagem de fundo
            unicornio.AtualizandoPosicao(flt_velocidadeParalaxeAtual * -1);

            //Atualize a posição do objeto 'morcego' com a velocidade atual sempre inversa, pois o morcego se move em direção contrária
            //do quadro de corte da imagem de fundo
            morcego.AtualizandoPosicao(flt_velocidadeParalaxeAtual * -1);

            //Animando o porco
            porco.Anime(gameTime);

            //Animando o unicornio
            unicornio.Anime(gameTime);

            //Se o porco for clicado a sidequest é chamada
            if (porco.Clicado(mouse))
            {
                RachaCuca.localAtual = RachaCuca.Local.SIDEQUEST;

                MediaPlayer.Stop();
                //Mudar a variável de som ambiente da cena para falsa, para que quando o jogo retorne para cena, o som ambiente toque novamente
                _0Cena.bln_somJaComecou = false;
            }
            //Se mouse tocar em morcego, anime...
            if (morcego.Tocado(mouse))
                morcego.Anime(gameTime);
            else
                morcego.frameAtual = 0;
        }

        /// <summary>
        /// Desenhe
        /// </summary>
        /// <param name="spriteBatch">Desenhar na tela de jogo</param>
        public override void Draw(SpriteBatch spriteBatch)
        {
            //Desenhe o objeto 'porco'
            porco.Draw(spriteBatch);

            //Deixe que a classe pai faça o que a filha não precisa...
            base.Draw(spriteBatch);

            //Desenhe o objeto 'unicornio'
            unicornio.Draw(spriteBatch);

            //Desenhe o objeto 'morcego'
            morcego.Draw(spriteBatch);
        }

        #endregion
    }
}
